package com.sh.test_one;

import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;

import com.sh.test_one.adapater.ListItemAdapter;
import com.sh.test_one.bean.ListItem;
import com.sh.test_one.dialog.CustomDialogFragment;
import com.sh.test_one.listener.OnDialogResultListener;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class NewsActivity extends AppCompatActivity implements AdapterView.OnItemClickListener, View.OnClickListener, OnDialogResultListener {

    private ImageView ig_left_image;
    private List<ListItem> listItems;
    private ListView listView;
    private ImageView sortImage;

    // 是否正序
    private boolean isUpSort = false;
    private ListItemAdapter adapter;



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        EdgeToEdge.enable(this);
        setContentView(R.layout.activity_news);

        // 初始化 UI 组件
        ig_left_image = findViewById(R.id.ig_left_imge);
        TextView countTextView = findViewById(R.id.tv_count);
        listView = findViewById(R.id.videoList);

        // 导航栏
        Toolbar toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        toolbar.setNavigationIcon(R.drawable.ic_arrow_back);
        toolbar.setNavigationOnClickListener(v -> {
            onBackPressed();
        });
        // 准备数据
        listItems = prepareData();
        // 设置视频总数的显示
        updateVideoCount(countTextView);

        // 创建自定义适配器并设置到 ListView
        adapter = new ListItemAdapter(this, listItems);
        listView.setAdapter(adapter);
        // 设置默认选中项的背景颜色
        setDefaultSelectedItemBackground(0);

        listView.setOnItemClickListener(this);


        // 排序功能
        sortImage = findViewById(R.id.mg_sort);
        sortImage.setImageResource(isUpSort?R.drawable.down_sort:R.drawable.up_sort);
        sortImage.setOnClickListener(this);

        // 回到顶部功能
        ImageView goTop =findViewById(R.id.go_top);
        goTop.setOnClickListener(this);
    }

    private void setDefaultSelectedItemBackground(int position) {
        // 确保位置有效
        if (position < 0 || position >= listItems.size()) {
            return;
        }
        // 获取默认选中项的视图
        View childView = listView.getChildAt(position);
        if (childView != null) {
            // 设置背景颜色
            childView.setBackgroundResource(R.drawable.selected_background);
        } else {
            // 如果视图不可见，需要滚动到该位置
            listView.post(() -> {
                listView.smoothScrollToPosition(position);
                View view = listView.getChildAt(position);
                if (view != null) {
                    view.setBackgroundColor(getResources().getColor(R.color.click_item_bg_color));
                }
            });
        }
    }



    // 准备数据
    private List<ListItem> prepareData() {
        List<ListItem> items = new ArrayList<>();
        items.add(new ListItem("美国国家飓风中心表示“艾达利亚”预计将增1", "2023.08.29 01:20 更新", "时长 13:48", R.drawable.one));
        items.add(new ListItem("叙利亚国防部称 以色列空袭叙政府军防空系2", "2023.08.29 01:20 更新", "时长 13:48", R.drawable.three));
        items.add(new ListItem("摩洛哥发生强震 摩洛哥继续向部分灾区空投3", "2023.08.29 01:20 更新", "时长 13:48", R.drawable.two));
        items.add(new ListItem("飓风袭击利比亚 民族团结政府称东部洪灾致4", "2023.08.29 01:20 更新", "时长 13:48", R.drawable.one));
        items.add(new ListItem("美国国家飓风中心表示“艾达利亚”预计将增5", "2023.08.29 01:20 更新", "时长 13:48", R.drawable.one));
        items.add(new ListItem("叙利亚国防部称 以色列空袭叙政府军防空系6", "2023.08.29 01:20 更新", "时长 13:48", R.drawable.three));
        items.add(new ListItem("摩洛哥发生强震 摩洛哥继续向部分灾区空投7", "2023.08.29 01:20 更新", "时长 13:48", R.drawable.two));
        items.add(new ListItem("飓风袭击利比亚 民族团结政府称东部洪灾致8", "2023.08.29 01:20 更新", "时长 13:48", R.drawable.one));
        items.add(new ListItem("美国国家飓风中心表示“艾达利亚”预计将增9", "2023.08.29 01:20 更新", "时长 13:48", R.drawable.one));
        items.add(new ListItem("叙利亚国防部称 以色列空袭叙政府军防空系10", "2023.08.29 01:20 更新", "时长 13:48", R.drawable.three));
        items.add(new ListItem("摩洛哥发生强震 摩洛哥继续向部分灾区空投11", "2023.08.29 01:20 更新", "时长 13:48", R.drawable.two));
        items.add(new ListItem("飓风袭击利比亚 民族团结政府称东部洪灾致12", "2023.08.29 01:20 更新", "时长 13:48", R.drawable.one));
        items.add(new ListItem("美国国家飓风中心表示“艾达利亚”预计将增13", "2023.08.29 01:20 更新", "时长 13:48", R.drawable.one));
        items.add(new ListItem("叙利亚国防部称 以色列空袭叙政府军防空系14", "2023.08.29 01:20 更新", "时长 13:48", R.drawable.three));
        return items;
    }

    // 获取多少个视频
    private void updateVideoCount(TextView countTextView) {
        String countText = String.format("共%s个视频", listItems.size());
        countTextView.setText(countText);
    }


    // 点击单个列表事件  弹出消息框
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        // 获取被点击的项
        ListItem item = (ListItem) parent.getItemAtPosition(position);
        // 更新背景颜色
        updateBackgroundColor(view);
        // 显示点击提示
        showItemClickToast(position, item);
        // 更新图片
        updateLeftImage(item.getPic());
        CustomDialogFragment dialogFragment = new CustomDialogFragment();
        dialogFragment.show(getSupportFragmentManager(), "CustomDialogFragment");
//        dialogFragment.getDialog().getWindow().setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.WRAP_CONTENT);


    }

    private void showItemClickToast(int position, ListItem item) {
        Toast.makeText(getApplicationContext(), "点击了第 " + (position + 1) + " 项：", Toast.LENGTH_SHORT).show();
    }

    private void updateLeftImage(int resourceId) {
        ig_left_image.setImageResource(resourceId);
    }

    private void updateBackgroundColor(View view) {
        // 遍历所有可见的项并清除背景颜色
        for (int i = 0; i < listView.getChildCount(); i++) {
            View child = listView.getChildAt(i);
            if (child != null) {
                child.setBackgroundColor(getResources().getColor(R.color.default_item_bg_color));
            }
        }
        view.setBackgroundColor(getResources().getColor(R.color.click_item_bg_color));
    }

    @Override
    public void onClick(View v) {
        int clickId = v.getId();
        if (clickId==R.id.mg_sort){
            isUpSort=!isUpSort;
            sortImage.setImageResource(isUpSort?R.drawable.down_sort:R.drawable.up_sort);
            Collections.reverse(listItems);
            adapter.notifyDataSetChanged();
        }
        if (clickId==R.id.go_top){
            listView.smoothScrollToPosition(0); // 平滑滚动到顶部
        }
    }


    @Override
    public void onDialogResult(String subscriptionName, int subscriptionPrice) {
        // 使用接收到的数据
        TextView resTv = findViewById(R.id.tv_res_msg);
        if (resTv == null) {
            Log.e("DialogResult", "TextView tv_res_msg is null");
        } else {
            resTv.setText(subscriptionName + subscriptionPrice);
        }
    }
}